# -*- coding:utf-8 -*-

from . import api
# 将json字符串转为字典
from flask import request, current_app, jsonify, session, g
from iHome.utils.captcha.captcha import captcha
from iHome import redis_store, db
from iHome import constants
from iHome.models import User
# 发送短信引入的模块
from iHome.utils.sms import CCP

from iHome.constants import QINIU_DOMIN_PREFIX
# 导入错误码
from iHome.utils.response_code import RET

from iHome.utils.storage_image import storage_image

# 引用判断用户登录的装饰器
from iHome.utils.common import login_required


@api.route("/user/auth", methods=["POST"])
@login_required
def set_user_auth():
    """保存用户的实名认证信息"""
    # 1.取出值，并判空
    data_dict = request.json
    real_name = data_dict.get("real_name")
    id_card = data_dict.get("id_card")
    if not all([real_name, id_card]):
        return jsonify(errno=RET.PARAMERR, errmsg="参数错误")

    # 2.取到当前登录的用户，并设置数据
    user_id = g.user_id
    try:
        user = User.query.get(user_id)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg="查询用户失败")
    if not user:
        return jsonify(errno=RET.USERERR, errmsg="用户不存在")

    # 保存用户的认证信息
    user.real_name = real_name
    user.id_card = id_card
    try:
        db.session.commit()
    except Exception as e:
        current_app.logger.error(e)
        db.session.rollback()
        return jsonify(errno=RET.DBERR, errmsg="保存数据失败")
    return jsonify(errno=RET.OK, errmsg="保存认证信息成功")


@api.route("/user/auth")
@login_required
def get_user_auth():
    """获取用户的实名认证信息"""
    user_id = g.user_id
    try:
        user = User.query.get(user_id)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg="查询用户失败")
    if not user:
        return jsonify(errno=RET.USERERR, errmsg="用户不存在")
    return jsonify(errno=RET.OK, errmsg="OK", data=user.to_autho_dict())


@api.route("/user")
@login_required
def get_user_info():
    """１．判断是否登录，获取到当前登录用户的id
    2.查询数据
    ３．将用户模型指定的数据进行格式返回"""
    user_id = g.user_id
    # user_id = session.get("user_id")
    try:
        user = User.query.get(user_id)
        print user
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg="查询数据错误")
    if not user:
        return jsonify(errno=RET.USERERR, errmsg="用户不存在")

    # 3.返回数据
    # resp_data = {
    #     "user_id": user_id,
    #     "avatar_url": QINIU_DOMIN_PREFIX + user.avatar_url,
    #     "mobile": user.mobile,
    #     "name": user.name
    # }

    print user.to_dict()

    return jsonify(errno=RET.OK, errmsg="OK", data=user.to_dict())


@api.route("/user/name", methods=["POST"])
@login_required
def set_user_name():
    """１．判断是否登录
    ２．获取到传入的用户名，并判空
    ３．取到当前登录用户的id并查询出对应的模型
    ４．更新模型
    ５．返回结果
    """
    # 1.TODO:判断是否登录

    # 2.获取到传入的用户名，并判空
    data_dict = request.json
    name = data_dict.get("name")
    if not name:
        return jsonify(errno=RET.PARAMERR, errmsg="参数不全")

    # 3.取到当前登录用户的id并查询出对应的模型
    user_id = g.user_id
    # user_id = session.get("user_id")
    try:
        user = User.query.get(user_id)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg="查询数据失败")

    if not user:
        return jsonify(errno=RET.USERERR, errmsg="用户不存在")

    # 4.更新模型
    try:
        user.name = name
        db.session.commit()
    except Exception as e:
        db.session.rollback()
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg="保存用户名失败")

    # 更新session中的用户名
    session['name'] = name

    # 5.返回结果
    return jsonify(errno=RET.OK, errmsg="修改成功")


@api.route("/user/avatar", methods=['POST'])
@login_required
def upload_avatar():
    """1.判断是否登录
    ２．获取要上传的文件内容
    ３．上传到七牛云
    ４．返回上传成功的图片地址"""

    # 1.TODO 判断是否登录

    # 2.获取要上传的文件内容
    try:
        avatar_file = request.files.get("avatar").read()
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.PARAMERR, errmsg="请选择图片")

    # 3.上传到七牛云
    try:
        key = storage_image(avatar_file)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.THIRDERR, errmsg="上传到七牛云失败")

    # 取到用户的user模型，将上传成功的头像的地址保存到模型中并更新到数据库
    try:
        user = User.query.get(session['user_id'])
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg="查询登录用户失败")
    if not user:
        return jsonify(errno=RET.USERERR, errmsg="用户不存在")
    user.avatar_url = key
    try:
        db.session.commit()
    except Exception as e:
        current_app.logger.error(e)
        db.session.rollback()
        return jsonify(errno=RET.DBERR, errmsg="保存用户头像失败")

    # 5.返回成功的图片地址
    return jsonify(errno=RET.OK, errmsg="上传成功", data={'avatar_url': QINIU_DOMIN_PREFIX + key})
